//
// Created by LiuYou on 2021/8/4.
//

//#ifndef LINUXENVIRONMENTPROGRAMMING_PROTO_HPP
//#define LINUXENVIRONMENTPROGRAMMING_PROTO_HPP
//
//
//class Proto {
//
//};
//
//
//#endif //LINUXENVIRONMENTPROGRAMMING_PROTO_HPP



#pragma once


#include <cstdint>
#include <ostream>


#define RCV_PORT            "1989"
// 512是udp推荐的包的长度。
// 512-8是减去udp的包头, 512-8-8是减去 math和chinese后 name可以用的最大值。
#define NAME_MAX            (512-8-8)
// 确实, 在实际中我觉得绝对不会使用封装了许多内容的标准库容器作为udp报文或者tcp字节流进行传输的,
// 一定是使用内置数组或者动态分配的内存来封装成udp报文或者tcp字节流的, 因为这样所占内存少。


namespace SocketBasic {
    class Msg {
    public:
        friend std::ostream& operator<<(std::ostream& os, const Msg& msg);

    public:
        Msg(char* name, uint32_t math, uint32_t chinese);

        Msg();

    public:
        uint32_t math{};
        uint32_t chinese{};
        uint8_t name[1]{};
    }__attribute__((packed));
    // 这里是告诉g++编译器不要对齐。
}
